package com.lin.vo;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * Cart购物车模型类
 *
 * @author manage
 */
public class Cart {

	private Map<String, CartItem> map = new LinkedHashMap<>();// 以图书id为Key,购物对象为value
	private Double total = 0d;  // 总金额+=小计

	public Map<String, CartItem> getMap() {
		return map;
	}

	public void setMap(Map<String, CartItem> map) {
		this.map = map;
	}

	public Double getTotal() {
		return total;
	}

	public void setTotal(Double total) {
		this.total = total;
	}

	/**
	 * 清空购物车
	 */
	public void clearCart() {
		// 清空购物车，实际上就是移除map中所有的键值对
		map.clear();
		// 总金额重置成0.0
		total = 0d;
	}

	/**
	 * 添加商品(购物项)
	 */
	public void addCart(CartItem cartItem) {
		// 必须要先从购物项中得到图书的id
		String bid = cartItem.getBook().getBid();
		// 判断map集合中是否已存在该购物项
		if (map.containsKey(bid)) {
			CartItem cartOldItem = map.get(bid);
			cartOldItem.setCount(cartOldItem.getCount() + cartItem.getCount());
		} else {
			// 不存在
			map.put(bid, cartItem);
		}
		/*total=total+cartItem.getSubtotal();(存在精度问题)*/
		total = new BigDecimal(total.toString()).add(new BigDecimal(cartItem.getSubtotal().toString())).doubleValue();
	}

	/**
	 * 删除商品
	 */
	public void removeCartItem(String bid) {
		// 移除map集合中指定id的元素
		CartItem cartItem = map.remove(bid);
		// 总金额也需要随之变化
		/*total=total-cartItem.getSubtotal();(存在精度问题)*/
		total = new BigDecimal(total.toString()).subtract(new BigDecimal(cartItem.getSubtotal().toString())).doubleValue();
	}

	/**
	 * 获取指定集合对象
	 *
	 * @return
	 */
	public Collection<CartItem> getCartItem() {
		return map.values();
	}
}
